package com.itheima.d2_chario;

import java.io.FileWriter;

//目标：掌握FileWriter将内存中数据以字符形式写到磁盘文件
public class Demo03 {
    public static void main(String[] args) throws Exception {
        /**
         * 作用：以内存为基准，把内存中的数据以字符的形式写出到磁盘文件中去的流
         *
         * 构造器：
         *      FileWriter(File file)：创建字符输出流管道与源文件对象接通
         *      FileWriter(File file，boolean append)：创建字符输出流管道与源文件对象接通，可追加数据
         *      FileWriter(String filepath)：创建字符输出流管道与源文件路径接通
         *      FileWriter(String filepath，boolean append)：创建字符输出流管道与源文件路径接通，可追加数据
         *
         * 写出数据的api：
         *      write(int c)：写一个字符
         *      write(char[] cbuf)：写入一个字符数组
         *      write(char[] cbuf, int off, int len)：写入字符数组的一部分
         *      write(String str)：写一个字符串
         *      write(String str, int off, int len)：写一个字符串的一部分
         *
         *
         * 流关闭和刷新：
         *      flush()：刷新流，还可以继续写数据
         *      close()：关闭流，释放资源，但是在关闭之前会先刷新流。一旦关闭，就不能再写数据
         *
         * 注意：写出字符串"\r\n"也可以换行
         */

        //需求：使用文件字符输出流，写出数据到c.txt文件中
        //1.创建FileWriter文件字符输出流对象，定位要写出的文件
        //FileWriter fw = new FileWriter(new File("day09-io\\c.txt"));
        FileWriter fw = new FileWriter("day12\\c.txt");
        //如果不希望原文件数据被清空，第二个参数给true
        //FileWriter fw = new FileWriter("day09-io\\c.txt", true);

        //2.调用write方法写出数据
        //2.1 写出'a'
        fw.write(97);

        //2.2 文件字符输出流写出数据后，暂时把字符数据放到内部的缓冲数组中，并没有真的把数据给写出到磁盘文件！
        //除非缓冲数组满了，或者手动刷新，才会写出到文件
        //fw.flush();

        //2.3 刷新后，可以继续写出数据，比如：写出一个字符数组
        char[] chs = {'黑', '马', '程', '序', '员'};
        fw.write(chs);

        //2.4 写出一个字符数组的一部分
        fw.write(chs, 2, 3);

        //2.5 写出一个字符串
        fw.write("牛批");

        //2.6 写出一个字符串的一部分
        fw.write("你好世界", 0, 2);

        //2.7 如果要换行，写出字符串"\r\n"
        fw.write("\r\n");
        fw.write("换行后的内容");

        //其实最后刷新一次即可
        fw.flush();

        //3.释放资源（close方法默认也会刷新一次！以后还是养成好的习惯，既要刷新也要释放资源）
        fw.close();
    }
}
